package com.pig4cloud.pigx.knowledge.dto;

import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
import lombok.experimental.FieldNameConstants;

import java.io.Serializable;

/**
 * 交互message
 *
 * @author lengleng
 * @date 2024/3/20
 */
@Data
public class ChatMessageDTO implements Serializable {

	/**
	 * 型号名称 (注意这里是平台内部的唯一标识名称)
	 */
	private String modelName;

	/**
	 * 消息key
	 */
	private Long messageKey;

	/**
	 * 会话ID
	 */
	private String conversationId;

	/**
	 * 是否是系统内部会话
	 */
	private boolean isInner;

	/**
	 * 对外密码
	 */
	private String accessKey;

	/**
	 * 历史消息3条
	 */
	private Integer retrieveSize = 3;

	/**
	 * 知识库ID
	 */
	@NotNull
	private Long datasetId;

	/**
	 * 内容
	 */
	@NotBlank
	private String content;

	/**
	 * 扩展信息
	 * <p>
	 * { "funcName": "查询", "table": { "dsName": "mysql", "tableNames": ["user"] } }
	 */
	private ExtDetails extDetails;

	@Data
	@FieldNameConstants
	public static class ExtDetails implements Serializable {

		/**
		 * 功能名称
		 */
		private String funcName;

		/**
		 * 数据库模式
		 */
		private Table table;

		/**
		 * 用户信息
		 */
		private String accessToken;

		/**
		 * 租户ID
		 */
		private Long tenantId;

	}

	@Data
	public static class Table implements Serializable {

		/**
		 * 数据源名称
		 */
		String dsName;

		/**
		 * 表名
		 */
		String[] tableNames;

	}

}
